package com.gustavo.sistema.bean;

import java.io.Serializable;
import java.util.List;

import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;

import com.gustavo.sistema.model.Produto;
import com.gustavo.sistema.model.Venda;
import com.gustavo.sistema.service.ErroNaFaseService;
import com.gustavo.sistema.service.VendaService;

@Named("vendaBean")
@SessionScoped
public class VendaBean implements Serializable{

	@Inject
	private VendaService vendaService;

	private List<Venda> vendas;

	private Venda venda;
	
	private Produto produto;
	
	private boolean alterar;

	/**
	 * Obtem a lista de vendas
	 * 
	 * @return Lista de vendas
	 * @throws ErroNaFaseBean
	 */
	public List<Venda> getVendas() throws ErroNaFaseBean {
		try {
			if (vendas == null) {
				vendas = vendaService.listarvendas();
			}
			return vendas;
		} catch (ErroNaFaseService e) {
			throw new ErroNaFaseBean(e);
		}
	}

	/**
	 * Abre a tela de edi��o de venda
	 * 
	 * @param venda
	 *            venda a editar
	 * 
	 */
	public String atualizar(Venda venda) {
		this.venda = venda;
		this.alterar = true;
		return "editar_venda";
	}

	/**
	 * Exclui um venda
	 * 
	 * @param venda
	 *            venda para excluir
	 * @throws ErroNaFaseBean
	 */
	public String excluir(Venda venda) throws ErroNaFaseBean {
		try {
			vendaService.excluir(venda.getId());
			venda = null;

			// Apos a exclusao, faz um redirect
			return "index?faces-redirect=true";
		} catch (ErroNaFaseService e) {
			throw new ErroNaFaseBean(e);
		}
	}

	/**
	 * Cadastra ou atualiza um venda (depende do estado da flag 'alterar')
	 * 
	 * @throws ErroNaFaseBean
	 */
	public String salvar() throws ErroNaFaseBean {
		try {
			
				vendaService.inserir(venda);
			
			venda = null;
			vendas = null;
			alterar = false;
			return "index?faces-redirect=true";
		} catch (ErroNaFaseService e) {
			throw new ErroNaFaseBean(e);

		}
	}

	public Venda getvenda() {
		if (venda == null) {
			venda = new Venda();
		}
		return venda;
	}

	public void setvenda(Venda venda) {
		this.venda = venda;
	}

	public boolean isAlterar() {
		return alterar;
	}

	public void setAlterar(boolean alterar) {
		this.alterar = alterar;
	}
	
	public Venda getVenda() {
		return venda;
	}

	public Produto getProduto() {
		return produto;
	}


}
